<!-- 

 -->
 <!DOCTYPE html>
 <html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
 </head>
 <body>
  <script>
    function Test(name){
      this.name = name// 添加一个属性
      // return {}返回一个引用数组，返回的就是{}
      return [2,3] //返回一个引用数组，返回的就是[2,3] 
    }
    Test.prototype.getName = function () {
      return this.name
    }
    const test = new Test('test')
    console.log(test, test.name)
    //1.创建一个空对象
    //2.绑定一个隐式对像， 指向构造函数的显示原型
    // 3.改变this的指向， 执行行代码
    //4.构造函数返回如果是引用类型 那么new操作符无效，否则是生效的
    function myNew(fn, ...args) {
      if(typeof fn !== "function"){
        throw TypeError("Type Errpr")
      }
      const obj = {} // 创建一个空对象
      obj.__proto__ = fn.prototype
      let res = fn.apply(obj, args) // 改变 this 指向， 执行行代码
      const isObject = typeof res === "object" && res !== null
      const isFunction = typeof res === "function"
      return isObject || isFunction ? res : obj 
    }
  </script>
 </body>
 </html>
